jaxb EclipseLink Moxy:Java类型绑定不使用子类型(组合)
我偶然遇到了与MOXy v2的一个问题。5.1最好用下面的例子来解释
输入:
<Root>
<parentId>1</parentId>
<parentVersion>1</parentVersion>
<children> <!-- Always has one and only one child -->
<child>
<cType>P</cType>
<cId>2</cId>
<cVersion>2</cVersion>
</child>
<children>
</Root>
使用上面的XML作为基本输入,并使用下面给出的绑定文件,所有java属性尤其是cType在运行解组器后都是非空的。所以,我们在这里很好
<?xml version="1.0"?>
<xml-bindings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
package-name="com.xyz.model"
xml-access-order="alphabetical"
xml-mapping-metadata-complete="true">
<xml-schema/>
<xml-java-type-adapters>
<xml-java-type-adapter value="com.xyz.unmarshal.xml.DateAdapter" type="java.util.Date"/>
<xml-java-type-adapter value="com.xyz.unmarshal.xml.BooleanAdapter" type="java.lang.Boolean"/>
</xml-java-type-adapters>
<java-types>
<java-type name="com.xyz.model.SomeType">
<xml-root-element name="Root"/>
<java-attributes>
<xml-element java-attribute="id" name="parentId"/>
<xml-element java-attribute="version" name="parentVersion"/>
<xml-element java-attribute="cType" name="children/child/cType"/>
<!--xml-element java-attribute="subType" name="children/child" --/>
</java-attributes>
</java-type>
<java-type name="com.xyz.model.SubType">
<java-attributes>
<xml-element java-attribute="subTypeId" name="cId"/>
<xml-element java-attribute="subTypeVersion" name="cVersion"/>
</java-attributes>
</java-type>
</java-types>
</xml-bindings>
但是,当我们在上面的示例中取消注释subType属性时,除了cType之外,其他所有属性都被填充。如果我们有与子类型属性的名称相同的名称开头的任何内容,则似乎就是这种情况
知道如何解决这个问题吗(我不能肯定地更改输入XML)
更新(2月3日):
有一个非常糟糕的解决方案-将绑定文件拆分为两个(在我的例子中),并使用不同的绑定文件将同一消息解组两次(代价高昂),然后将对象合并回来。我对我提出的解决方案一点也不满意。因此,要么需要探索其他一些参考实现,要么等待在MOXy(理想)中解决这个问题
问候
# 1 楼答案
问题在于元数据文档的以下部分:
当您将
subType
属性映射到children/child
路径时,它希望映射到child
的域对象拥有该元素下面的内容。由于cType
的映射在该元素下方,所以事情就变得不正常了